`:top
`!JSON-RPC`! (`F33f`_`[JavaScript Object Notation`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=JavaScript_Object_Notation]`_`f `F33f`_`[Remote Procedure Call`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Remote_Procedure_Call]`_`f) ist ein Protokoll zum Aufruf von `F33f`_`[Methoden`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Methode_(Programmierung)]`_`f in `F33f`_`[entfernten Computersystemen`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Verteiltes_System]`_`f, ähnlich wie `F33f`_`[XML-RPC`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=XML-RPC]`_`f (die Daten werden jedoch in `F33f`_`[JSON`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=JavaScript_Object_Notation]`_`f statt in `F33f`_`[XML`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Extensible_Markup_Language]`_`f gesendet). Bei der Spezifikation wurde darauf geachtet, dass JSON-RPC möglichst keine unnötige Komplexität enthält und über verschiedene `F33f`_`[Kommunikationsprotokolle`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Kommunikationsprotokoll]`_`f genutzt werden kann. Dadurch kann es sehr flexibel eingesetzt werden. Zudem unterstützt das Protokoll `F33f`_`[asynchrone Kommunikation`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Asynchrone_Kommunikation]`_`f, da alle Anfragen und Antworten eine ID enthalten, was eine einfache Zuordnung von Antworten zu den entsprechenden Anfragen ermöglicht.
JSON-RPC 1.0 erlaubt Anfragen in beide Richtungen (`F33f`_`[Peer-to-Peer`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Peer-to-Peer]`_`f), die meisten JSON-RPC 1.0 Implementierungen unterstützen jedoch standardmäßig nur eine Richtung (`F33f`_`[Client-Server-Modell`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Client-Server-Modell]`_`f).
JSON-RPC 2.0 verwendet ein `F33f`_`[Client-Server-Modell`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Client-Server-Modell]`_`f. Anfragen in beide Richtungen sind möglich, indem auf beiden Seiten ein JSON-RPC-Server verwendet wird.
>>Contents
• `F0af`_`[Funktionsweise`#funktionsweise]`_`f
• `F0af`_`[Anfrage`#anfrage]`_`f
• `F0af`_`[Antwort`#antwort]`_`f
• `F0af`_`[Beispiele`#beispiele]`_`f
• `F0af`_`[Version 2.0`#version-2-0]`_`f
• `F0af`_`[Version 1.0`#version-1-0]`_`f
• `F0af`_`[Versionsgeschichte`#versionsgeschichte]`_`f
• `F0af`_`[Implementierungen`#implementierungen]`_`f
• `F0af`_`[Verbreitung`#verbreitung]`_`f
• `F0af`_`[Weblinks`#weblinks]`_`f
• `F0af`_`[Einzelnachweise`#einzelnachweise]`_`f
-─
>>Funktionsweise
>>>Anfrage
Ein JSON-RPC-Call besteht aus einem `F33f`_`[JSON-Objekt`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=JavaScript_Object_Notation]`_`f, das vom `F33f`_`[Client`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Client]`_`f an einen `F33f`_`[Server`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Server]`_`f geschickt wird. Mögliche Anfragetypen sind
• Request (englisch für: „Anfrage“): Der Server soll eine Antwort liefern.
• Notification (englisch für: „Benachrichtigung“): Einwegkommunikation, vom Server wird keine Antwort erwartet.
• Batch Request (englisch für: „Stapelanfrage“): Mehrere Anfragen (`*Notifications`* oder `*Requests`*) werden zusammengefasst als JSON-Array gesendet, dessen Elemente dann die einzelnen Request-Objekte sind. (Verfügbar ab Version 2.0)
In der folgenden Tabelle sind die Bestandteile eines Request-Objekts aufgelistet.
`t
| Bestandteil | Beschreibung | Bemerkung |
|---|---|---|
| jsonrpc | Ein String mit dem Namen der JSON-RPC-Version ("2.0") | Ab Version 2.0 |
| method | Ein String mit dem Namen der Funktion, die aufgerufen werden soll. | |
| params | Ein Array oder Objekt mit den Parametern, die der Funktion übergeben werden sollen. | Objekt ab Version 2.0 möglich |
| id | Ein eindeutiger Identifikator für die Nachricht. Kann jeden beliebigen Datentyp haben (i. d. R. Integer). | |
`t
Eine Notification zeichnet sich dadurch aus, dass:
• JSON-RPC Version 2.0: `B100`F9d9id`f`b fehlt
• JSON-RPC Version 1.0: `B100`F9d9id`f`b `B100`F9d9null`f`b ist
>>>Antwort
Im Fall eines Requests schickt der Server nach der Ausführung der angeforderten Methode eine Antwort als JSON-Objekt zurück an den Client. Die Bestandteile eines Response-Objektes sind in der folgenden Tabelle aufgelistet.
`t
| Bestandteile | Beschreibung | Bemerkung |
|---|---|---|
| jsonrpc | Ein String mit dem Namen der JSON-RPC-Version („2.0“) | Ab Version 2.0 |
| result | Das Rückgabeobjekt der Funktion, falls kein RPC-Fehler auftrat. Andernfalls: Version 2.0: wird dieses Feld weggelassen. Version 1.0: hat dieses Feld den Wert null . | |
| error | Das Fehlerobjekt, falls ein RPC-Fehler auftrat. Andernfalls: Version 2.0: wird dieses Feld weggelassen. Version 1.0: hat dieses Feld den Wert null . | |
| id | Enthält den gleichen Wert wie id des Requests, der diese Response verursacht hat. | |
`t
Erhält der Server eine Notification, führt er die angegebene Methode aus, sendet jedoch keine Antwort. Erhält er einen Batch-Request, führt er die aufgelisteten Methoden aus, und sendet eine Batch-Response (d. h. die Antworten auf alle Requests im Batch-Request in einer Nachricht).
>>Beispiele
In diesen Beispielen steht `B100`F9d9-->`f`b für eine Nachricht vom Client an der Server, und `B100`F9d9<--`f`b umgekehrt.
>>>Version 2.0
Ein einfaches Beispiel mit einer Anfrage und einer Antwort:
`B100`F9d9--> { "jsonrpc": "2.0", "method": "gibAus", "params": ["Hallo JSON-RPC"], "id": 1}`f`b
`B100`F9d9<-- { "jsonrpc": "2.0", "result": "Hallo JSON-RPC", "id": 1}`f`b
Gleiches Beispiel mit "named parameters":
`B100`F9d9--> { "jsonrpc": "2.0", "method": "gibAus", "params": {"Nachricht": "Hallo JSON-RPC"}, "id": 2}`f`b
`B100`F9d9<-- { "jsonrpc": "2.0", "result": "Hallo JSON-RPC", "id": 2}`f`b
Weitere Beispiele finden sich am Ende der JSON-RPC 2.0 Spezifikation.
>>>Version 1.0
Ein einfaches Beispiel mit einer Anfrage und einer Antwort
`B100`F9d9--> { "method": "gibAus", "params": ["Hallo JSON-RPC"], "id": 1}`f`b
`B100`F9d9<-- { "result": "Hallo JSON-RPC", "error": null, "id": 1}`f`b
Dieses Beispiel zeigt einen Teil der Kommunikation in einer Chat-Anwendung. Der Chat-Dienst sendet eine `*Notification`* für jede Nachricht, die der Client erhalten soll. Der Client sendet einen `*Request`*, um eine Nachricht zu senden und erwartet eine positive Rückmeldung, um zu wissen, dass die Nachricht veröffentlicht wurde.`:cite-ref-1[`F5bf`_`[1`#cite-note-1]`_`f]
`B100`F9d9...`f`b
`B100`F9d9--> {"method": "veröffentlicheNachricht", "params": ["Hallo an alle!"], "id": 99}`f`b
`B100`F9d9<-- {"result": 1, "error": null, "id": 99}`f`b
`B100`F9d9<-- {"method": "empfangeNachricht", "params": ["Benutzer1", "Wir unterhielten uns gerade"], "id": null}`f`b
`B100`F9d9<-- {"method": "empfangeNachricht", "params": ["Benutzer3", "Ich muss jetzt los, tschüss"], "id": null}`f`b
`B100`F9d9--> {"method": "veröffentlicheNachricht", "params": ["Ich habe eine Frage!"], "id": 101}`f`b
`B100`F9d9<-- {"method": "ändereStatus", "params": ["abwesend","Benutzer3"], "id": null}`f`b
`B100`F9d9<-- {"result": 1, "error": null, "id": 101}`f`b
`B100`F9d9...`f`b
>>Versionsgeschichte
Die erste Version vom JSON-RPC stammt von 2005. Die Version 2.0 wurde 2010 verabschiedet.
`t
| Version | Beschreibung | Datum |
|---|---|---|
| 1.0 | Original-Version [ 2 ] | 2005 |
| Entwurf „1.1 WD“ | Auf HTTP eingeschränkt, benannte Parameter, spezifische Fehlercodes und introspektive Funktionen hinzugefügt. | 07.08.2006 |
| Entwurf „1.1 Alt“ | Alternativer (vereinfachter) Vorschlag für 1.1 WD. | 06.05.2007 |
| Entwurf „1.2“ | Leicht modifizierte Variante von 1.1 Alt. Eine spätere Version wurde in 2.0 umbenannt. | 27.12.2007 |
| 2.0 | aktuelle Spezifikation [ 3 ] | 2010 |
`t
>>Implementierungen
JSON-RPC wurde in verschiedenen Programmiersprachen implementiert, darunter `F33f`_`[JavaScript`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=JavaScript]`_`f, `F33f`_`[C++`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=C++]`_`f, `F33f`_`[C`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=C_(Programmiersprache)]`_`f, `F33f`_`[C#`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=C-Sharp]`_`f, `F33f`_`[Java`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Java_(Programmiersprache)]`_`f, `F33f`_`[Python`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Python_(Programmiersprache)]`_`f und `F33f`_`[PHP`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=PHP]`_`f. Da JSON aus Unicode-Zeichen besteht, kann JSON-RPC jedoch auch in anderen Programmiersprachen relativ einfach implementiert werden.`:cite-ref-4[`F5bf`_`[4`#cite-note-4]`_`f]
>>Verbreitung
Wo überall JSON-RPC eingesetzt wird, ist in der Öffentlichkeit selten ein Thema. Google hat am 31. Juli 2019 verkündet, dass ab dem 12. August 2020 für den Zugriff auf die Google-APIs statt JSON-RPC nur noch `F33f`_`[REST`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Representational_State_Transfer]`_`f verwendet werden kann.`:cite-ref-5[`F5bf`_`[5`#cite-note-5]`_`f]
>>Weblinks
• Die offizielle JSON-RPC Website
• JSON-RPC-Google Group diskutiert Themen rund um JSON-RPC.
• JSON-RPC Spezifikationen, Links usw. simple-is-better.org
• Die offizielle JSON-RPC 1.0 Website enthält unter anderem eine Liste der verfügbaren JSON-RPC 1.0 Implementierungen (veraltet).
>>Einzelnachweise
`:cite-note-1`!1.`! `F0af`_`[↑`#cite-ref-1]`_`f specification – JSON-RPC – Trac. (`F33f`_`[Memento`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Webarchivierung]`_`f des Originals vom 17. Mai 2008 im `*`F33f`_`[Internet Archive`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Internet_Archive]`_`f`*) `!Info:`! Der Archivlink wurde automatisch eingesetzt und noch nicht geprüft. Bitte prüfe Original- und Archivlink gemäß Anleitung und entferne dann diesen Hinweis.@1@2Vorlage:Webachiv/IABot/json-rpc.org json-rpc.org
`:cite-note-2`!1.`! json-rpc.org (`F33f`_`[Memento`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Webarchivierung]`_`f des Originals vom 17. Mai 2008 im `*`F33f`_`[Internet Archive`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Internet_Archive]`_`f`*) `!Info:`! Der Archivlink wurde automatisch eingesetzt und noch nicht geprüft. Bitte prüfe Original- und Archivlink gemäß Anleitung und entferne dann diesen Hinweis.@1@2Vorlage:Webachiv/IABot/json-rpc.org
`:cite-note-3`!2.`! simple-is-better.org
`:cite-note-4`!4.`! `F0af`_`[↑`#cite-ref-4]`_`f `*`F33f`_`[RFC`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Request_for_Comments]`_`f: 4627`* – `*application/json`*. (englisch).
`:cite-note-5`!5.`! `F0af`_`[↑`#cite-ref-5]`_`f Rainald Menge-Sonnentag: `*Google schickt JSON-RPC-Zugriff in Rente.`* In: `*heise online.`* 2. August 2019, abgerufen am 4. August 2019.
`c`F0af`_`[↑ Back to top`#top]`_`f`a